package wint.mvc.flow;

import java.io.OutputStream;
import java.io.Writer;
import java.util.Locale;
import java.util.Map;

import javax.servlet.http.HttpSession;

import wint.core.service.ServiceContext;
import wint.mvc.form.Form;
import wint.mvc.form.fileupload.UploadFile;
import wint.mvc.parameters.Arguments;
import wint.mvc.parameters.Parameters;
import wint.mvc.template.Context;
import wint.mvc.url.UrlBroker;

/**
 * @author pister
 * 2011-12-29 04:08:04
 */
public interface FlowData {
	
	Object getAttribute(String name);
	
	void setAttribute(String name, Object value);
	
	Parameters getParameters();
	
	String getTarget();
	
	/**
	 * 内部重定向
	 * @param target
	 */
	void forwardTo(String target);
	
	/**
	 * 设置渲染目标
	 * @param target
	 */
	void setTarget(String target);
	
	/**
	 * 外部重定向到一个location
	 * status code: 302
	 * @param location
	 */
	void redirectTo(String location);
	
	/**
	 * 外部重定向到一个url module
	 * @param urlModule
	 * @param target
	 * @return
	 */
	UrlBroker redirectTo(String urlModule, String target);
	
	/**
	 * 是否已经被外部重定向
	 * @return
	 */
	boolean isSendRedirected();
	
	/**
	 * @return
	 */
	boolean isRedirected();
	
	void resetRedirected();
	
	Writer getWriter();
	
	OutputStream getOutputStream();
	
	void commitData();
	
	void setStatusCode(int code);
	
	int getStatusCode();
	
	String getContentType();
	
	void setContentType(String contentType);
	
	Locale getLocale();
	
	void setLocale(Locale locale);
	
	Form getForm(String name);
	
	Arguments getArguments();

	void setArguments(Arguments arguments);
	
	void setViewType(String viewType);
	
	String getViewType();
	
	Context getInnerContext();

	void setInnerContext(Context innerContext);
	
	ServiceContext getServiceContext();
	
	HttpSession getSession();
	
	UrlBroker forkUrl(String urlModuleName, String target);
	
	 Map<String, UploadFile> getUploadFiles();
	
}
